package myselfMysql

import (
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"time"
)

// CreateMySQLClient
//
// 描述: 创建一个 MySQL 数据库连接
//
// 参数:
//
//	dsn：MySQL 数据库的连接字符串
//
// 返回值:
//
//	*gorm.DB：MySQL 数据库连接实例
//	error：错误信息
func CreateMySQLClient(dsn string) (*gorm.DB, error) {
	// 创建 MySQL 数据库连接
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		return nil, err
	}
	//fmt.Println("db层 创建mysql链接成功")

	// 设置连接池参数（可选）
	sqlDB, err := db.DB()
	if err != nil {
		return nil, err
	}

	// 设置连接池参数
	sqlDB.SetMaxIdleConns(10)                  // 设置空闲连接池中的最大连接数
	sqlDB.SetMaxOpenConns(100)                 // 设置打开的最大连接数
	sqlDB.SetConnMaxLifetime(10 * time.Minute) // 设置连接的最大生命周期

	// 测试连接
	var result int
	if err := db.Raw("SELECT 1").Scan(&result).Error; err != nil {
		return nil, err
	}

	return db, nil
}

// DestroyMySQLClient
//
// 描述: 销毁一个 MySQL 数据库连接
//
// 参数:
//
//	db：传入一个 MySQL 数据库连接实例
//
// 返回值:
//
//	error：错误信息
func DestroyMySQLClient(db *gorm.DB) error {
	if db == nil {
		return nil // 如果数据库连接实例为 nil，直接返回
	}

	// 获取底层的 sql.DB 实例
	sqlDB, err := db.DB()
	if err != nil {
		return err
	}

	// 关闭数据库连接
	if err := sqlDB.Close(); err != nil {
		return err
	}

	return nil
}
